package Demo3;

import Demo1.Animal;
import Demo1.Cat;
import Demo1.Dog;

public class TestAnimal {
    public static void eatFood(Animal a){
        a.eat();
    }
//    public static Animal buyAnimal(String var){
//        if ("狗".equals(var)){
//            return new Dog("狗狗",1);
//        } else if ("猫".equals(var)) {
//            return new Cat("猫猫",1);
//        }else{
//            return null;
//        }
//    }

    public static void main(String[] args) {
        Animal cat=new Cat("AT",2);
        Dog dog=new Dog("小米渣",1);

        //向上转型
        Animal animal=cat;
        animal.eat();
        animal=dog;
        animal.eat();
        if (animal instanceof Cat){
            cat=(Cat)animal;
            cat.mew();
        }
        if(animal instanceof Dog){
            dog=(Dog)animal;
            dog.bark();
        }
        //animal.bark();编译失败,编译器将Animal当成Animal对象来处理,而Animal类里没有bark()

//        cat=(Cat)animal;
//        cat.mew();//向上转型:/ 程序可以通过编程，但运行时抛出异常---因为：animal实际指向的是狗
//        // 现在要强制还原为猫，无法正常还原，运行时抛出：ClassCastException
//
//        dog=(Dog)animal;
//        dog.bark();
//        // animal本来指向的就是狗，因此将animal还原为狗也是安全的
    }
}


